/**
 * 中控台底部按钮
 */
export enum BottomButtons {
  /**
   * 自主暂停/手动模式
   */
  STOP,
  /**
   * 强光
   */
  STRONG_LIGHT,
  /**
   * 功放开
   */
  AMPLIFIER_OPEN,
  /**
   * 功放关
   */
  AMPLIFIER_CLOSE,
  /**
   * 语音接收
   */
  VOICE,
  /**
   * 结束音频
   */
  END_AUDIO,
  /**
   * 自主模式
   */
  AUTO,
  /**
   * 云台复位
   */
  PANTILT_RESET
}

/**
 * 中控台顶部按钮
 */
export enum TopButtons {
  /**
   * 换挡
   */
  GEAR = 0,
  /**
   * 音频1
   */
  AUDIO_1 = 2,
  /**
   * 音频2
   */
  AUDIO_2 = 3,
  /**
   * 音频3
   */
  AUDIO_3 = 4,
  /**
   * 音频4
   */
  AUDIO_4 = 5
}

/**
 * 车的档位
 */
export enum Gears {
  /**
   * 停车
   */
  STOP = 1,
  /**
   * 倒车
   */
  REVERSE = 2,
  /**
   * 空档
   */
  EMPTY = 3,
  /**
   * 前进档
   */
  FORWARD = 4
}

export const useConsoleButton = () => {
  let oldValue = 0
  /**
   * 顶部或底部的按钮状态
   * 总共 8 个按钮
   * 没有按下去的情况，所有按钮为 0
   */
  let oldButtonSet = new Array(8).fill('0')

  /**
   * 获取当前操作的按钮及状态
   */
  const onButtonDown = (newValue: number) => {
    if (newValue !== oldValue) {
      oldValue = newValue
      /**
       * 操作按钮后的状态
       * 从十进制转为二进制
       * 不够 8 位说明前面的按钮没有按下，补足 0
       */
      const newButtonSet = newValue.toString(2).split('')
      const newLength = newButtonSet.length
      if (newButtonSet.length < 8) {
        for (let i = 0; i < 8 - newLength; i++) {
          newButtonSet.unshift('0') // 左补 0
        }
      }
      const changedButtonIndex = newButtonSet.findIndex(
        (item, index) => item !== oldButtonSet[index]
      )
      oldButtonSet = newButtonSet

      return {
        index: changedButtonIndex,
        buttonStatus: newButtonSet[changedButtonIndex] === '1' ? true : false
      }
    }
  }

  return {
    /**
     * 获取当前操作的按钮及状态
     */
    onButtonDown
  }
}
